//读取并解析版本号
const { app } = require("electron");
const { exec } = require("child_process");
const https = require("https");
const fs = require("fs");
const path = require("node:path");
const axios = require("axios");

var versionUrl = "https://sxh.xyvcard.com.cn/aaa/version.json";
var updatePackageUrl = "https://sxh.xyvcard.com.cn/aaa/app.asar";

var localVersion = {};
var remoteVersion = {};


// 加载 本地 版本号
async function loadLocalVersion() {
    // 从version.json中读取内容,赋值给 bigVersion,smallVersion
    let versionFile = path.join(__dirname, "version.json");
    let content = fs.readFileSync(versionFile, "utf8");
    localVersion = splitVersion(JSON.parse(content).version);
    return 1;
}

// 加载 远程 版本号
function loadRemoteVersion() {
    return axios.get(versionUrl).then((res) => {
        remoteVersion = splitVersion(res.data.version);
    });
}

// 分割版本号
function splitVersion(version) {
    const splitArr = version.split("."); // 使用点号将版本号分割成数组
    const majorVersion = splitArr[0]; // 大版本号
    const minorVersion = splitArr.slice(1).join("."); // 小版本号

    return {
        major: majorVersion,
        minor: minorVersion,
    };
}

// 判断有无版本更新
async function justUpdate() {
    await loadLocalVersion();
    console.log("localVersion-->", localVersion);

    await loadRemoteVersion();
    // console.log("remoteVersion-->", remoteVersion);

    if (localVersion.major != remoteVersion.major) {
        // 大版本目前采用手动校验，如果有，打开浏览器，重新下载;更新极少,先不做
        return;
    }

    if (localVersion.minor == remoteVersion.minor) {
        return;
    }

    // 需要更新:下载远程版本
    download(updatePackageUrl);
}

// 下载
function download(fileUrl) {
    const destination = "./resources/app.bak";//下载后重命名为 app.bak(无法下载asar后缀)

    const file = fs.createWriteStream(destination);

    https.get(fileUrl, (response) => {
        response.pipe(file);
        file.on("finish", () => {
            file.close(() => {
                console.log("文件下载完成");
                // 重命名app.bak为app.asar
                renameAsar();
            });
        });
    }).on("error", (err) => {
        fs.unlink(destination, () => {
            console.error(`文件下载失败：${err.message}`);
        });
    });
}

// 重命名app.bak为app.asar ,并重启
function renameAsar() {
    exec("xcopy /y .\\resources\\app.bak .\\resources\\app.asar");

    setTimeout(() => {
        // fs.unlink("./resources/app.bak"); //直接删除报错,不删除了
        app.quit();
        app.relaunch();
    }, 5000); // 直接重启也报错,延迟5秒
}

module.exports = { justUpdate };
